package com.eureka.asyn.controller;

import com.eureka.asyn.service.MsgService;
import com.eureka.bclass.base.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.concurrent.CompletableFuture;

/**
 * @Description: 短信控制器
 * @Author: lixing
 * @Date: 2021/6/6 12:39
 */
@RestController
@RequestMapping("/msg")
public class MsgController {
    /**
     * 每个账户每天最多发送10条邮件
     */
    @Value("${sendmsg.limit}")
    private long sendmsgLimit;

    /**
     * 每次发送邮件的时间间隔120秒
     */
    @Value("${sendmsg.interval}")
    private long sendmsgInterval;

    /**
     * 邮件有效时间120秒
     */
    @Value("${sendmsg.effective}")
    private long sendmsgEffective;

    @Resource
    private MsgService msgService;

    /**
     * @Description TODO 用户登录
     * @Author lixing
     * @Date 2019/3/30 15:51
     * @Param [
     *  category: 短信类型，详见 MsgCategoryEnum 枚举
     *  receiver: 接收者的手机号码
     * ]
     */
    @PostMapping("userLogin")
    public BaseResult<Object> userLogin(BaseMsgEntity baseMsgEntity) throws Exception {
        // 获取当前请求用户的userId，通过拦截器+自定义注解 实现用户id 【用户服务】
        // TODO 校验输入的账户是否合法
        // TODO 校验该账户是否可以发送短信
        CompletableFuture<Boolean> sendMailCompletableFuture = msgService.userLogin(baseMsgEntity);
        CompletableFuture.allOf(sendMailCompletableFuture).join();
        return sendMailCompletableFuture.get() ? new BaseResult<>().success() : new BaseResult<>().fail("发送失败");
    }

    /**
     * @Description TODO 修改密码
     * @Author lixing
     * @Date 2019/3/30 15:51
     * @Param [
     *  category: 短信类型，详见 MsgCategoryEnum 枚举
     *  receiver: 接收者的手机号码
     * ]
     */
    @PostMapping("updatePwd")
    public BaseResult<Object> updatePwd(BaseMsgEntity baseMsgEntity) throws Exception {
        // 获取当前请求用户的userId，通过拦截器+自定义注解 实现用户id 【用户服务】
        // TODO 校验输入的账户是否合法
        // TODO 校验该账户是否可以发送短信
        CompletableFuture<Boolean> sendMailCompletableFuture = msgService.updatePwd(baseMsgEntity);
        CompletableFuture.allOf(sendMailCompletableFuture).join();
        return sendMailCompletableFuture.get() ? new BaseResult<>().success() : new BaseResult<>().fail("发送失败");
    }
}
